package com.qfedu.mtl.service.impl;

import com.qfedu.mtl.dao.RoleDao;
import com.qfedu.mtl.dao.impl.RoleDaoImpl;
import com.qfedu.mtl.entity.Roles;
import com.qfedu.mtl.service.RoleService;
import com.qfedu.mtl.util.page.Pager;
import com.qfedu.mtl.vo.TreeVO;

import java.util.ArrayList;
import java.util.List;

/**
 * @version v1.0
 * @Date 2023/9/26 19:17
 * @Author DARKER
 * @Email 1402216045@qq.com
 */
public class RoleServiceImpl implements RoleService {

    private RoleDao roleDao = new RoleDaoImpl();

    /**
     * 添加角色
     * @param roles
     * @return
     */
    @Override
    public int add(Roles roles) {
        //如果插入的角色重复，则不插入
        if(!roleDao.checkInfoIsRepeat(roles)){
           int row = roleDao.insert(roles);
           return row;
        }
        //插入失败
        return -1;
    }

    @Override
    public int delById(String id) {
        return roleDao.delete(id);
    }

    @Override
    public int updateById(Roles roles) {
        return roleDao.update(roles);
    }

    /**
     * 分页查找
     * @param page
     * @param size
     * @param role
     * @return
     */
    @Override
    public Pager<Roles> findPage(Integer page, Integer size, Roles role) {
        List<Roles> all = roleDao.findAll(page,size,role);
        int total = roleDao.selectTotal(role);
        Pager<Roles> rolesPager = new Pager<Roles>(all,page,size,total);
        return rolesPager;
    }

    @Override
    public List<Roles> findAllRole() {

        return roleDao.findSimpleRole();
    }

    @Override
    public void delBatchById(List<Integer> ids) {
        roleDao.delBatchById(ids);
    }

    @Override
    public void grant(Integer roleId, List<Integer> menuIds) {
        roleDao.insertRoleMenu(roleId,menuIds);
    }

    @Override
    public List<TreeVO> findAvailableMenus() {
        List<TreeVO> root = new ArrayList<>();
        //1.查出全部数据(不管层级)
        List<TreeVO> all = roleDao.selectAllMenus();
        //2.查第一级菜单
        for (TreeVO vo : all ){
            //当前为第一级菜单
            if (vo.getParentCode().equals("00")) {
                root.add(vo);
            }else{
        //3.组装无限级菜单
                //非一级菜单,找到自己的上级，添加到上级中
                for (TreeVO other : all) {
                    if (vo.getParentCode().equals(other.getCode())){
                        other.getChildren().add(vo);
                    }
                }
            }
        }
        return root;
    }


}
